package com.wei.czz.framework.store.controller;

import com.wei.czz.common.annotation.Resubmit;
import com.wei.czz.common.dto.store.boss.BossEnumDto;
import com.wei.czz.common.jsr303.group.Submit;
import com.wei.czz.common.jsr303.group.Update;
import com.wei.czz.common.tool.Result;
import com.wei.czz.common.vo.common.UpdateStatusVo;
import com.wei.czz.common.vo.store.StoreBossVo;
import com.wei.czz.framework.store.manager.StoreBossManager;
import com.wei.czz.framework.store.service.StoreBossService;
import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 商店老板表
 *
 * @author wei
 * email 945158190@gmail.com
 * date 2023-11-22 17:44:15
 */
@RestController
@RequestMapping("/store-boss")
@AllArgsConstructor
public class StoreBossController {

    private static final Logger log = LoggerFactory.getLogger(StoreBossController.class);

    private final StoreBossManager storeBossManager;

    private final StoreBossService storeBossService;

    /**
     * 保存商店老板接口
     * <p>
     * 此接口会校验是否重复提交
     * @param storeBossVo 参数对象
     * @return 结果
     */
    @Resubmit(message = "保存商店老板")
    @PostMapping("/save")
    public Result<Object> saveStoreBoss(@Validated(Submit.class) @RequestBody StoreBossVo storeBossVo) {
        log.info("开始保存商店老板业务。{}", storeBossVo);

        storeBossManager.saveStoreBoss(storeBossVo);

        log.info("保存商店老板业务结束");
        return Result.success();
    }

    /**
     * 获取商店老板枚举接口
     * @param id      主键
     * @param storeId 商店主键
     * @return 结果
     */
    @GetMapping("/enums")
    public Result<BossEnumDto> getStoreBossEnums(@RequestParam(value = "id", required = false) Long id,
                                    @RequestParam("storeId") Long storeId) {
        log.info("开始获取商店老板枚举业务。id={} storeId={}", id, storeId);

        BossEnumDto bossEnumDto = storeBossManager.getStoreBossEnums(id, storeId);

        log.info("获取商店老板枚举业务结束");
        return Result.success(bossEnumDto);
    }

    /**
     * 修改商店老板接口
     * @param storeBossVo 参数对象
     * @return 结果
     */
    @Resubmit(message = "修改商店老板")
    @PostMapping("/update")
    public Result<Object> updateStoreBoss(@Validated(Update.class) @RequestBody StoreBossVo storeBossVo) {
        log.info("开始修改商店老板业务。{}", storeBossVo);

        storeBossManager.updateStoreBoss(storeBossVo);

        log.info("修改商店老板业务结束");
        return Result.success();
    }

    /**
     * 修改商店老板状态接口
     * @param updateStatusVo 参数对象
     * @return 结果
     */
    @Resubmit(message = "修改商店老板")
    @PostMapping("/update/status")
    public Result<Object> updateStoreAccountStatus(@Validated @RequestBody UpdateStatusVo updateStatusVo) {
        log.info("开始修改商店老板状态业务。{}", updateStatusVo);

        storeBossService.updateStoreBossStatus(updateStatusVo);

        log.info("修改商店老板状态业务结束");
        return Result.success();
    }

    /**
     * 删除商店老板接口
     * @param id 主键
     * @return 结果
     */
    @Resubmit(message = "删除商店老板")
    @DeleteMapping("/delete")
    public Result<Object> deleteStoreBoss(@RequestParam("id") Long id) {
        log.info("开始删除商店老板业务。id={}", id);

        storeBossManager.deleteStoreBoss(id);

        log.info("删除商店老板业务结束");
        return Result.success();
    }

}
